/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BBDD;

import DTO.*;

import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author usuario_local
 */
public class GestorBBDD {
    
    
    private Connection conexion;
    
    public void abrirBase()throws ClassNotFoundException, SQLException {
			try{
            DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
            /*Se crea una conexión a la base de datos indicando la dirección de la base de datos, el usuario y el
            password*/
            conexion = DriverManager.getConnection ("jdbc:mysql://localhost","root", "");
            conexion.setCatalog("DocHistoria");
            //Se crea un objeto de la clase Statement para poder enviar comandos SQL a la base de datos
            
                   
            //-----------------------------ERRORES----------------------------
			}
			catch(SQLException ex){
				System.out.println("Error: SQLException");
				while(ex!=null){
					System.out.println("SQLState: "+ ex.getSQLState());
					System.out.println("mensaje: "+ ex.getMessage());
					System.out.println("Vendedor: "+ ex.getErrorCode());
				}
			
			}
			catch(Exception ex){System.out.println("Error inesperado");}
		}
	
	public void cerrarBase()throws ClassNotFoundException, SQLException {
		try {
			conexion.close();
		} catch(SQLException ex){
			System.out.println("Error: SQLException");
			while(ex!=null){
				System.out.println("SQLState: "+ ex.getSQLState());
				System.out.println("mensaje: "+ ex.getMessage());
				System.out.println("Vendedor: "+ ex.getErrorCode());
			}
		
		}
		catch(Exception ex){System.out.println("Error inesperado");}
	}
	
	/*--Visualizar información: visualiza una ventana mensaje--*/
	protected void mensajeAlUsuario(String  mensaje) 	{	JOptionPane.showMessageDialog(null, mensaje, "Acceso a datos", JOptionPane.INFORMATION_MESSAGE);	}

	
    
    
    
    
public Personaje recuperaPersonaje(int id) throws ClassNotFoundException, SQLException{
    Personaje p=null;
    abrirBase();
    java.sql.Statement st =conexion.createStatement();	
    ResultSet resultadoSelect = st.executeQuery("SELECT nombre,apellidos,biografia,fechaNac,fechafMuerte,lugarNac,lugarMuerte FROM personaje  WHERE id='"+id+"' ");
        int col=resultadoSelect.findColumn("nombre");
	resultadoSelect.next();
	String nombre=resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("apellidos");	
	String ap= resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("biografia");	
	String bi= resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("fechaNac");	
	String fn= resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("fechafMuerte");	
	String fm= resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("lugarNac");	
	String ln= resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("lugarMuerte");	
	String lm= resultadoSelect.getString(col);
        ArrayList<Alias> alias = new ArrayList<Alias>();
        ArrayList<Cargo> cargos = new ArrayList<Cargo>();
       int idaux;
       ResultSet rt;
       String al;
       Alias a;
       resultadoSelect=st.executeQuery("Select idalias from perstienealias where idpers='"+id+"'");      
       resultadoSelect.findColumn("idalias");
                    while (resultadoSelect.next())
                    {
                        idaux =resultadoSelect.getInt(1);
                       a=dameAlias(idaux);
                        alias.add(a);
                        
                    }
         String ca;
         String fi;
         String ff;
         Cargo c;
         resultadoSelect=st.executeQuery("Select idcargo,fechaIni,fechaFin from perstienecargo where idpers='"+id+"'");                
         resultadoSelect.findColumn("idcargo");           
         while (resultadoSelect.next())
                    {
                        idaux =resultadoSelect.getInt(1);
                        fi= resultadoSelect.getString(2);
                        ff= resultadoSelect.getString(3);
                       
                        c=dameCargo(idaux,fi,ff);
                        cargos.add(c);
                    }
        
        
        
        p= new Personaje(id,nombre,ap,bi,fn,fm,ln,lm,alias,cargos);
    
    cerrarBase();
    return p;
    
    
}
public Alias dameAlias(int id) throws ClassNotFoundException, SQLException{
    abrirBase();
    java.sql.Statement st =conexion.createStatement();	
    ResultSet rt=st.executeQuery("Select nombre from alias where id='"+id+"'");
                        rt.next();
                       String  al= rt.getString(1);
                Alias a=new Alias(id,al);
       cerrarBase();
       return a;
}
public Cargo dameCargo(int id,String fi, String ff) throws ClassNotFoundException, SQLException{
    abrirBase();
    java.sql.Statement st =conexion.createStatement();	
     ResultSet rt=st.executeQuery("Select nombre,descripcion from cargo where id='"+id+"'");
                        rt.next();
                        String ca= rt.getString(1);
                        String des=rt.getString(2);
                       Cargo  c=new Cargo(id,ca,fi,ff,des);
       cerrarBase();
       return c;
}
public Acontecimiento recuperaAcontecimiento(int id) throws ClassNotFoundException, SQLException{
    Acontecimiento a=null;
    abrirBase();
    java.sql.Statement st =conexion.createStatement();	
    ResultSet resultadoSelect = st.executeQuery("SELECT nombre,descripcion,fechaInicio,fechaFin FROM acontecimiento  WHERE id='"+id+"' ");
        int col=resultadoSelect.findColumn("nombre");
	resultadoSelect.next();
	String nombre=resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("descripcion");	
	String des= resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("fechaInicio");	
	Date fIni= resultadoSelect.getDate(col);		
	col=resultadoSelect.findColumn("fechaFin");	
	Date fFin= resultadoSelect.getDate(col);		
        ArrayList<Fichero> fich= recuperaFichero(id);
        
        
       
     a= new Acontecimiento(id,nombre,des,fIni,fFin,fich);
    cerrarBase();
    return a;
    
    
}
public ArrayList<Fichero> recuperaFichero(int id) throws SQLException, ClassNotFoundException{
     ArrayList<Fichero> fich = new ArrayList<Fichero>();
       int idaux;
        ResultSet rt;
        String al;
        Fichero f;
    abrirBase();
    java.sql.Statement st =conexion.createStatement();
        ResultSet resultadoSelect=st.executeQuery("Select idfich from aconttienefich where idacont='"+id+"'");                
        resultadoSelect.findColumn("idfich");           
        while (resultadoSelect.next())
                    {
                        idaux =resultadoSelect.getInt(1);
                        rt=st.executeQuery("Select nombre,formato,URI from fichero where id='"+idaux+"'");
                        rt.findColumn("nombre");
                        rt.next();
                        al= rt.getString(1);
                        f= new Fichero(idaux,al,rt.getString(2),rt.getString(3));
                        fich.add(f);
                        
                    }
          cerrarBase();
          return fich;             
}
public Colectivo recuperaColectivo(int id) throws ClassNotFoundException, SQLException{
    Colectivo c=null;
    abrirBase();
    java.sql.Statement st =conexion.createStatement();	
    ResultSet resultadoSelect = st.executeQuery("SELECT nombre,descripcion FROM colectivo  WHERE id='"+id+"' ");
        int col=resultadoSelect.findColumn("nombre");
	resultadoSelect.next();
	String nombre=resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("descripcion");	
	String des= resultadoSelect.getString(col);	
        
        ArrayList<Fichero> fich= recuperaFichero(id);
        c=new Colectivo(id,nombre,des,fich);
    cerrarBase();
    return c;
    
    
}


public Descripcion recuperaDescripcion(int id) throws ClassNotFoundException, SQLException{
    Descripcion a=null;
    abrirBase();
    java.sql.Statement st =conexion.createStatement();	
    ResultSet resultadoSelect = st.executeQuery("SELECT titulo,descripcion FROM descripcion  WHERE id='"+id+"' ");
        int col=resultadoSelect.findColumn("titulo");
	resultadoSelect.next();
	String titulo=resultadoSelect.getString(col);		
	col=resultadoSelect.findColumn("descripcion");	
	String des= resultadoSelect.getString(col);			
        ArrayList<Fichero> fich= recuperaFichero(id);
        a=new Descripcion(id,titulo,des,fich);
    cerrarBase();
    return a;
    
    
}

public Documento recuperaDocumento(int id) throws ClassNotFoundException, SQLException{
    Documento d;   //absurdo, pero he supuesto que añadiriamos algo...
    //recupero los persontajes,ascontecimientos y coelctivos que tiene...
      abrirBase();
      ArrayList<Personaje> pers=new ArrayList<Personaje>();
      ArrayList<Acontecimiento> aconts=new ArrayList<Acontecimiento>();
      ArrayList<Colectivo> colects=new ArrayList<Colectivo>();
      ArrayList<Descripcion> des=new ArrayList<Descripcion>();
      Personaje p;
      Colectivo c;
      Descripcion de;
      Acontecimiento a;
    java.sql.Statement st =conexion.createStatement();	
    ResultSet resultadoSelect = st.executeQuery("SELECT idpers FROM doctienepers  WHERE iddoc='"+id+"' ");
    int col=resultadoSelect.findColumn("idpers");
    while(resultadoSelect.next()){
	int idpers=resultadoSelect.getInt(col);		
        p= recuperaPersonaje(idpers);
        pers.add(p);
    }
    resultadoSelect = st.executeQuery("SELECT idacont FROM doctieneacont  WHERE iddoc='"+id+"' ");
    col=resultadoSelect.findColumn("idacont");
    while(resultadoSelect.next()){
	int idacont=resultadoSelect.getInt(col);		
        a= recuperaAcontecimiento(idacont);
        aconts.add(a);
    }
    
    resultadoSelect = st.executeQuery("SELECT idcolec FROM doctienecolect  WHERE iddoc='"+id+"' ");
    col=resultadoSelect.findColumn("idcolec");
    while(resultadoSelect.next()){
	int idcolect=resultadoSelect.getInt(col);		
        c= recuperaColectivo(idcolect);
        colects.add(c);
    }
    resultadoSelect = st.executeQuery("SELECT iddesc FROM doctienedescr  WHERE iddoc='"+id+"' ");
    col=resultadoSelect.findColumn("iddesc");
    while(resultadoSelect.next()){
	int iddes=resultadoSelect.getInt(col);		
       de= recuperaDescripcion(iddes);
        des.add(de);
    }
    
    d=new Documento(id,pers,colects,aconts,des);
    return d;
    
    
}


public ArrayList<Colectivo> recuperaColectivoAvanz(String id,String nombre) throws ClassNotFoundException, SQLException{
    
    Colectivo c=null;
    abrirBase();
     ArrayList<Colectivo> cole= new ArrayList<Colectivo>();
    java.sql.Statement st =conexion.createStatement();	
    String consulta;
    if(id.equals("")) consulta= "nombre='"+nombre+"'";
    else if (nombre.equals("")) consulta= "id='"+id+"'";
    else consulta= "id='"+id+"' and nombre='"+nombre+"'";
  
   
        ResultSet resultadoSelect = st.executeQuery("SELECT id,nombre,descripcion FROM colectivo  WHERE"+ consulta );
        int col=resultadoSelect.findColumn("id");
	while(resultadoSelect.next()){
            int idd=resultadoSelect.getInt(1);
            String nom=resultadoSelect.getString(2);		
            String des= resultadoSelect.getString(3);	
            ArrayList<Fichero> fich= recuperaFichero(idd);
            c=new Colectivo(idd,nom,des,fich);
            cole.add(c);
        }
        
    cerrarBase();
    return cole;  //puede haber mas de uno...
    
    
}
public ArrayList<Personaje> recuperaPersonajeAvanz(String id,String nombre,String ali) throws ClassNotFoundException, SQLException{
    
    Personaje c=null;
    abrirBase();
     ArrayList<Personaje> pers= new ArrayList<Personaje>();
    java.sql.Statement st =conexion.createStatement();	
    String consulta;
    if(id.equals("")) consulta= "nombre='"+nombre+"'";
    else if (nombre.equals("")) consulta= "id='"+id+"'";
    else consulta= "id='"+id+"' and nombre='"+nombre+"'";
   if(!consulta.equals("")){//Si tiene id y/o nombre
        ResultSet resultadoSelect = st.executeQuery("SELECT id,nombre,apellidos,biografia,fechaNac,fechafMuerte,lugarNac,lugarMuerte FROM personaje  WHERE "+ consulta);
        int col=resultadoSelect.findColumn("id");
	while(resultadoSelect.next()){
            int idd=resultadoSelect.getInt(1);    
            String nom=resultadoSelect.getString(2);		
            String ap= resultadoSelect.getString(3);	
            String bi= resultadoSelect.getString(4);		
            Date fn= resultadoSelect.getDate(5);		
            Date fm= resultadoSelect.getDate(6);			
            String ln= resultadoSelect.getString(7);	
            String lm= resultadoSelect.getString(8);
            ArrayList<Alias> alias = new ArrayList<Alias>();
            ArrayList<Cargo> cargos = new ArrayList<Cargo>();
            int idaux;
             ResultSet rt;
             String al;
            Alias a;
          c=recuperaPersonaje(idd);
                pers.add(c);
        }
        
   }
   else{
      
           ResultSet resultadoSelect = st.executeQuery("SELECT id FROM alias WHERE nombre='"+ali+"'");
           resultadoSelect.findColumn("id");
           while(resultadoSelect.next()){
               int idalias=resultadoSelect.getInt(1);
                ResultSet re = st.executeQuery("SELECT idpers FROM perstienealias  WHERE idalias='"+idalias+"'");
                re.findColumn("idpers");
                while(re.next()){
                    int idpers=re.getInt(1);
                    Personaje pe=recuperaPersonaje(idpers);
                    pers.add(pe);
                }
           }
      
       
       
   }
    cerrarBase();
    return pers;  //puede haber mas de uno...
    
    
}


public ArrayList<Acontecimiento> recuperaAcontecimientoAvanz(String id,String nombre) throws ClassNotFoundException, SQLException{
    
    Acontecimiento c=null;
    abrirBase();
     ArrayList<Acontecimiento> acon= new ArrayList<Acontecimiento>();
    java.sql.Statement st =conexion.createStatement();	
    String consulta;
    if(id.equals("")) consulta= "nombre='"+nombre+"'";
    else if (nombre.equals("")) consulta= "id='"+id+"'";
    else consulta= "id='"+id+"' and nombre='"+nombre+"'";

   ResultSet resultadoSelect = st.executeQuery("SELECT id,nombre,descripcion,fechaInicio,fechaFin FROM acontecimiento  WHERE  "+consulta);
        int col=resultadoSelect.findColumn("id");
	while(resultadoSelect.next()){
            int idd= resultadoSelect.getInt(1);
            String nom=resultadoSelect.getString(2);		
            String des= resultadoSelect.getString(3);		
            Date fIni= resultadoSelect.getDate(4);		
            Date fFin= resultadoSelect.getDate(5);		
            ArrayList<Fichero> fich= recuperaFichero(idd);
        c= new Acontecimiento(idd,nom,des,fIni,fFin,fich);
       
            acon.add(c);
        }
        
    cerrarBase();
    return acon;  //puede haber mas de uno...
    
    
}

 public void guardarPersonaje(Personaje p) throws ClassNotFoundException, SQLException{
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
	select.executeUpdate("UPDATE personaje SET nombre='"+p.getNombre()+"' WHERE id='"+p.getId()+"' ");
	select.executeUpdate("UPDATE personaje SET apellidos='"+p.getApellidos()+"' WHERE id='"+p.getId()+"' ");
        select.executeUpdate("UPDATE personaje SET biografia='"+p.getBiografia()+"' WHERE id='"+p.getId()+"' ");
	select.executeUpdate("UPDATE personaje SET fechaNac='"+p.getFechaNac()+"' WHERE id='"+p.getId()+"' ");
	select.executeUpdate("UPDATE personaje SET fechafMuerte='"+p.getFechafMuerte()+"' WHERE id='"+p.getId()+"' ");
	select.executeUpdate("UPDATE personaje SET lugarNac='"+p.getLugarNac()+"' WHERE id='"+p.getId()+"' ");
	select.executeUpdate("UPDATE personaje SET lugarMuerte='"+p.getLugarMuerte()+"' WHERE id='"+p.getId()+"' ");
       //los alias:
        for (int i=0;i<p.getAlias().size();i++){
                ResultSet resultadoSelect = select.executeQuery("SELECT nombre FROM alias  WHERE id='"+p.getAlias().get(i).getId() +"' ");
                int col=resultadoSelect.findColumn("nombre");
                resultadoSelect.next();
                String al=resultadoSelect.getString(col);		
                if(!al.equals(p.getAlias().get(i))){//si lo ha modificado, elimino la relacion con el antiguo y hago uno nuevo
                       select.executeUpdate ( "DELETE FROM perstienealias WHERE idalias='"+p.getAlias().get(i) +"' AND idpers='"+p.getId()+"' " ); 
                       int num=numAlias()+1;
                       select.executeUpdate ("INSERT INTO alias (id,nombre) VALUES('"+num+"','"+p.getAlias().get(i).getNombre() +"')");
                       select.executeUpdate ("INSERT INTO perstienealias (idpers,idalias) VALUES('"+p.getId()+"','"+num+"')");
                }       
            }
            
        
        //los cargos:
        for (int i=0;i<p.getCargos().size();i++){
                select.executeUpdate("UPDATE cargo SET nombre='"+p.getCargos().get(i).getNombre() +"' WHERE id='"+p.getCargos().get(i).getId() +"' ");
                select.executeUpdate("UPDATE cargo SET descripcion='"+p.getCargos().get(i).getDescripcion() +"' WHERE id='"+p.getCargos().get(i).getId() +"' ");
                select.executeUpdate("UPDATE perstienecargo SET fechaIni='"+p.getCargos().get(i).getFI() +"' WHERE idpers='"+p.getId()+"' and idcargo='"+p.getCargos().get(i).getId()+"' ");
                select.executeUpdate("UPDATE perstienecargo SET fechaFin='"+p.getCargos().get(i).getFF() +"' WHERE idpers='"+p.getId()+"' and idcargo='"+p.getCargos().get(i).getId() +"' ");
        }       
            
            
        
       
        cerrarBase();
       
   }
 
 public int numAlias() throws ClassNotFoundException, SQLException{
     abrirBase();
			java.sql.Statement select = conexion.createStatement();	
			ResultSet resultadoSelect = select.executeQuery("SELECT Count(*) as Nombre FROM alias");
			int col=resultadoSelect.findColumn("Nombre");
			resultadoSelect.next();
			int cuenta= resultadoSelect.getInt(col);			
			cerrarBase();
                        return cuenta;
			
     
 }
 
 public int numDoc() throws ClassNotFoundException, SQLException{
     abrirBase();
			java.sql.Statement select = conexion.createStatement();	
			ResultSet resultadoSelect = select.executeQuery("SELECT Count(*) as Nombre FROM documento");
			int col=resultadoSelect.findColumn("Nombre");
			resultadoSelect.next();
			int cuenta= resultadoSelect.getInt(col);			
			cerrarBase();
                        return cuenta;
			
     
 }
 
 public int numAcont() throws ClassNotFoundException, SQLException{
     abrirBase();
			java.sql.Statement select = conexion.createStatement();	
			ResultSet resultadoSelect = select.executeQuery("SELECT Count(*) as Nombre FROM acontecimiento");
			int col=resultadoSelect.findColumn("Nombre");
			resultadoSelect.next();
			int cuenta= resultadoSelect.getInt(col);			
			cerrarBase();
                        return cuenta;
			
     
 }
 
 public int numColect() throws ClassNotFoundException, SQLException{
     abrirBase();
			java.sql.Statement select = conexion.createStatement();	
			ResultSet resultadoSelect = select.executeQuery("SELECT Count(*) as Nombre FROM colectivo");
			int col=resultadoSelect.findColumn("Nombre");
			resultadoSelect.next();
			int cuenta= resultadoSelect.getInt(col);			
			cerrarBase();
                        return cuenta;
			
     
 }
 
 
 

 public void guardarAcontecimiento(Acontecimiento a) throws ClassNotFoundException, SQLException{
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
	
	select.executeUpdate("UPDATE acontecimiento SET descripcion='"+a.getDescripcion()+"' WHERE id='"+a.getId()+"' ");
        select.executeUpdate("UPDATE acontecimiento SET fechaInicio='"+a.getFechaIni()+"' WHERE id='"+a.getId()+"' ");
	select.executeUpdate("UPDATE acontecimiento SET fechaFin='"+a.getFechaFin()+"' WHERE id='"+a.getId()+"' ");
        for (int i=0;i<a.getFich().size();i++){
                select.executeUpdate("UPDATE fichero SET nombre='"+a.getFich().get(i).getNombre() +"' WHERE id='"+a.getFich().get(i).getId() +"' ");
                select.executeUpdate("UPDATE fichero SET formato='"+a.getFich().get(i).getFormato() +"' WHERE id='"+a.getFich().get(i).getId() +"' ");
                select.executeUpdate("UPDATE fichero SET URI='"+a.getFich().get(i).getURI() +"' WHERE id='"+a.getFich().get(i).getId() +"' ");
                
        }   
	cerrarBase();
       
   }
 public void guardarColectivo(Colectivo c) throws ClassNotFoundException, SQLException{
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
	select.executeUpdate("UPDATE colectivo SET nombre='"+c.getNombre()+"' WHERE id='"+c.getId()+"' ");
	select.executeUpdate("UPDATE colectivo SET descripcion='"+c.getDescripcion()+"' WHERE id='"+c.getId()+"' ");
        for (int i=0;i<c.getFich().size();i++){
                select.executeUpdate("UPDATE fichero SET nombre='"+c.getFich().get(i).getNombre() +"' WHERE id='"+c.getFich().get(i).getId() +"' ");
                select.executeUpdate("UPDATE fichero SET formato='"+c.getFich().get(i).getFormato() +"' WHERE id='"+c.getFich().get(i).getId() +"' ");
                select.executeUpdate("UPDATE fichero SET URI='"+c.getFich().get(i).getURI() +"' WHERE id='"+c.getFich().get(i).getId() +"' ");
                
        } 
        cerrarBase();
       
   }
 
 public void eliminarPersonaje(Personaje p) throws ClassNotFoundException, SQLException{
     abrirBase();
     java.sql.Statement select = conexion.createStatement();
     select.executeUpdate ( "DELETE FROM personaje WHERE id='"+p.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM perstienecargo WHERE idpers='"+p.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM perstienealias WHERE idpers='"+p.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM doctienepers WHERE idpers='"+p.getId()+"' " ); 	
     cerrarBase();
 }
 
  public void eliminarDocumento(Documento d) throws ClassNotFoundException, SQLException{
     abrirBase();
     java.sql.Statement select = conexion.createStatement();
     select.executeUpdate ( "DELETE FROM documento WHERE id='"+d.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM doctieneacont WHERE iddoc='"+d.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM doctienecolect WHERE iddoc='"+d.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM doctienedescr WHERE iddoc='"+d.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM doctienepers WHERE iddoc='"+d.getId()+"' " ); 	
     cerrarBase();
 }
  
 public void eliminarAcontecimiento(Acontecimiento a) throws ClassNotFoundException, SQLException{
     abrirBase();
     java.sql.Statement select = conexion.createStatement();
     select.executeUpdate ( "DELETE FROM acontecimiento WHERE id='"+a.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM aconttienefich WHERE idacont='"+a.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM doctieneacont WHERE idacont='"+a.getId()+"' " ); 	
     cerrarBase();
 }
public void eliminarColectivo(Colectivo c) throws ClassNotFoundException, SQLException{
     abrirBase();
     java.sql.Statement select = conexion.createStatement();
     select.executeUpdate ( "DELETE FROM colectivo WHERE id='"+c.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM colecttienefich WHERE idcolec='"+c.getId()+"' " ); 	
     select.executeUpdate ( "DELETE FROM doctienecolect WHERE idcolec='"+c.getId()+"' " ); 	
     cerrarBase();
 }

    public void anyadirDocumento(int id) throws ClassNotFoundException, SQLException {
       abrirBase();
       Statement st = conexion.createStatement();
       st.executeUpdate ("INSERT INTO documento (id) VALUES('"+id+"')");
       cerrarBase();
    }


    

    public void anyadirPersonaje(int id, String nombre, String apellido, String biografia,String fechanacimiento,String fechamuerte, String lugarnacimiento, String lugarmuerte) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
       select.executeUpdate ("INSERT INTO personaje (id, nombre, apellidos, biografia, fechaNac, fechafMuerte, lugarNac, lugarMuerte) "
               + "VALUES('"+id+"', '"+nombre+"', '"+apellido+"', '"+biografia+"', '"+fechanacimiento+"', '"+fechamuerte+"', '"+lugarnacimiento+"', '"+lugarmuerte+"')");
       cerrarBase();
    }

    public void anyadirColectivo(int id, String nombre, String desc) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
       select.executeUpdate ("INSERT INTO colectivo (id, nombre, descripcion) VALUES('"+id+"', '"+nombre+"', '"+desc+"')");
       cerrarBase();
    }
    

    public void anyadirAcontecimiento(int id, String nombre, String desc, String fechaini, String fechafin) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
       select.executeUpdate ("INSERT INTO acontecimiento (id, nombre, descripcion, fechaInicio, fechafin) VALUES "
               + "('"+id+"', '"+nombre+"', '"+desc+"', '"+fechaini+"', '"+fechafin+"')");
       cerrarBase();
    }

    public String damePersonaje(int id) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
        String resultado="";
       ResultSet rs=select.executeQuery("Select p.nombre from personaje p where p.id='"+id+"'");                
                    while (rs.next())
                    {
                         resultado+=rs.getString(1)+'\n';
                    }
       cerrarBase();
       return resultado;
       
    }

    public String dameColectivo(int id) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
        String resultado="";
       ResultSet rs=select.executeQuery("Select nombre from colectivo where id='"+id+"'");                
                    while (rs.next())
                    {
                         resultado+=rs.getString(1)+'\n';
                    }
       cerrarBase();
       return resultado;
    }

    public String dameAcontecimiento(int id) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
        String resultado="";
       ResultSet rs=select.executeQuery("Select nombre from acontecimiento where id='"+id+"'");                
                    while (rs.next())
                    {
                         resultado+=rs.getString(1)+'\n';
                    }
       cerrarBase();
       return resultado;
    }

     public ArrayList<Acontecimiento> busquedaSimpleA(ArrayList<String> cosas) throws ClassNotFoundException, SQLException {
        ArrayList<Acontecimiento> resAs = new ArrayList<Acontecimiento>();
        ArrayList<Acontecimiento> as = new ArrayList<Acontecimiento>();
        
         abrirBase();
        java.sql.Statement select = conexion.createStatement();
        ResultSet rs;
        rs=select.executeQuery("Select id,nombre,descripcion,fechaInicio,fechaFin from acontecimiento");    
        rs.findColumn("id");
	while(rs.next()){
            int id=rs.getInt(1);
            String nom=rs.getString(2);
            String des=rs.getString(3);
            Date fi=rs.getDate(4);
            Date ff=rs.getDate(5);
              ArrayList<Fichero> fich= recuperaFichero(id);
            Acontecimiento a= new Acontecimiento(id,nom,des,fi,ff,fich);
            as.add(a);
        }
        
       
        int i=0; int j=0; 
        String cosa;
        while(i<cosas.size()){
            cosa=cosas.get(i);  
            j=0;
            while(j<as.size()){
                String id=as.get(j).getId()+"";
                if(id.equals(cosa) || as.get(j).getNombre().equals(cosa) || as.get(j).getDescripcion().equals(cosa)
                        || as.get(j).getFechaIni().toString().equals(cosa) || as.get(j).getFechaFin().toString().equals(cosa))
                    resAs.add(as.get(j));
                j++;
            }
           i++;
            
            
        }
     
                 
       cerrarBase();
       return resAs;
    }

        public ArrayList<Personaje> busquedaSimpleP(ArrayList<String> cosas) throws ClassNotFoundException, SQLException {
         ArrayList<Personaje> resPs = new ArrayList<Personaje>();
         ArrayList<Personaje> ps = new ArrayList<Personaje>();
         abrirBase();
        java.sql.Statement select = conexion.createStatement();
        ResultSet rs;
        rs=select.executeQuery("Select id,nombre,apellidos,biografia,fechaNac,fechafMuerte,lugarNac,lugarMuerte FROM personaje");    
        rs.findColumn("id");
	while(rs.next()){
            int id=rs.getInt(1);
            String nom=rs.getString(2);
            String ap=rs.getString(3);
            String bio=rs.getString(4);
            Date fn=rs.getDate(5);
            Date fm=rs.getDate(6);
            String ln=rs.getString(7);
            String lm=rs.getString(8);
            Personaje p=recuperaPersonaje(id);
                ps.add(p);
        }
             
        int i=0; int j=0; 
        String cosa;
        while(i<cosas.size()){
            cosa=cosas.get(i);  
            j=0;
            while(j<ps.size()){
                String id=ps.get(j).getId()+"";
                if(id.equals(cosa) || ps.get(j).getNombre().equals(cosa) || ps.get(j).getApellidos().equals(cosa)
                        || ps.get(j).getFechaNac().toString().equals(cosa) || ps.get(j).getFechafMuerte().toString().equals(cosa) 
                        || ps.get(j).getBiografia().equals(cosa))
                    resPs.add(ps.get(j));
                j++;
            }
            
        i++;    
        }
        cerrarBase();
       return resPs;
    }

      public ArrayList<Colectivo> busquedaSimpleC(ArrayList<String> cosas) throws ClassNotFoundException, SQLException {
         ArrayList<Colectivo> resCs = new ArrayList<Colectivo>();
         ArrayList<Colectivo> cs = new ArrayList<Colectivo>();
         abrirBase();
        java.sql.Statement select = conexion.createStatement();
        ResultSet rs;
        rs=select.executeQuery("Select id,nombre,descripcion from colectivo");
        rs.findColumn("id");
	while(rs.next()){
            int id=rs.getInt(1);
            String nom=rs.getString(2);
            String des=rs.getString(3);
            ArrayList<Fichero> fich= recuperaFichero(id);
            Colectivo c= new Colectivo(id,nom,des,fich);
            cs.add(c);
        }
             
        int i=0; int j=0; 
        String cosa;
        while(i<cosas.size()){
            cosa=cosas.get(i);  
            j=0;
            while(j<cs.size()){
                String id=cs.get(j).getId()+"";
                if(id.equals(cosa) || cs.get(j).getNombre().equals(cosa) || cs.get(j).getDescripcion().equals(cosa))
                    resCs.add(cs.get(j));
                j++;
            }
     
            
         i++;   
        }
        cerrarBase();
       return resCs;
    }

      
      public ArrayList<Documento> busquedaSimpleD(ArrayList<String> cosas,ArrayList<Acontecimiento> aconts,ArrayList<Colectivo> colects,ArrayList<Personaje> pers) throws ClassNotFoundException, SQLException {
        
        ArrayList<Documento> resDs = new ArrayList<Documento>();
        int id;
        abrirBase();
        java.sql.Statement st =conexion.createStatement();	
        ResultSet resultadoSelect;
        int col;
        Acontecimiento a;
        Documento d;
        if(aconts!=null)
            for(int i=0;i<aconts.size();i++){
                id=aconts.get(i).getId();
                resultadoSelect = st.executeQuery("SELECT iddoc FROM doctieneacont  WHERE idacont='"+id+"' ");
                col=resultadoSelect.findColumn("iddoc");
                while(resultadoSelect.next()){
                    int iddoc=resultadoSelect.getInt(col);	
                    d= recuperaDocumento(iddoc);
                    resDs.add(d);
                }
            }
        Personaje p;
        if (pers!=null)
            for(int i=0;i<pers.size();i++){
                id=pers.get(i).getId();
                resultadoSelect = st.executeQuery("SELECT iddoc FROM doctienepers  WHERE idpers='"+id+"' ");
                col=resultadoSelect.findColumn("iddoc");
                while(resultadoSelect.next()){
                    int iddoc=resultadoSelect.getInt(col);	
                    d= recuperaDocumento(iddoc);
                    resDs.add(d);
                }
            }
        Colectivo c;
        if(colects!=null)
            for(int i=0;i<colects.size();i++){
                id=colects.get(i).getId();
                resultadoSelect = st.executeQuery("SELECT iddoc FROM doctienecolects  WHERE idcolec='"+id+"' ");
                col=resultadoSelect.findColumn("iddoc");
                while(resultadoSelect.next()){
                    int iddoc=resultadoSelect.getInt(col);	
                    d= recuperaDocumento(iddoc);
                    resDs.add(d);
                }
            }
        
        
        cerrarBase();
       return resDs;
    }


    public int dameIDPersonajePorNombre(String nombre) throws ClassNotFoundException, SQLException {
       abrirBase();
        java.sql.Statement select = conexion.createStatement();
        int resultado = 0;
       ResultSet rs=select.executeQuery("Select id from personaje p where p.nombre='"+nombre+"'");                
                    while (rs.next())
                    {
                         resultado=rs.getInt(1)+'\n';
                    }
       cerrarBase();
       return resultado;
    }

    public void anyadirDocTienePers(int iddoc, int id2) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
       select.executeUpdate ("INSERT INTO doctienepers (idpers, iddoc) VALUES('"+id2+"', '"+iddoc+"')");
       cerrarBase();
    }

    public String[] dameRefAPersonajeOtrosDoc(int id2, int iddoc) throws ClassNotFoundException, SQLException {
        abrirBase();
        String [] resultado;
        java.sql.Statement select = conexion.createStatement();
        
        ResultSet resultadoSelect = select.executeQuery("SELECT DISTINCT idpers, Count(*) as Num from doctienepers where iddoc!='"+iddoc+"'"
                + "and idpers='"+id2+"' group by idpers");
        int col=resultadoSelect.findColumn("Num");
        resultadoSelect.next();
        int cuenta= resultadoSelect.getInt(col);
       resultado=new String[cuenta];
       int i=0;
       ResultSet rs=select.executeQuery("Select nombre from doctienepers, personaje where iddoc!='"+iddoc+"'"
                + "and idpers='"+id2+"' and id='"+id2+"' group by 'nombre'");                
                    while (rs.next())
                    {
                         resultado[i]=rs.getString(1)+'\n';
                         i++;
                    }
       cerrarBase();
       return resultado;
    }

    public void anyadirDocTieneColect(int iddoc, int id2) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
       select.executeUpdate ("INSERT INTO doctienecolect (idcolec, iddoc) VALUES('"+id2+"', '"+iddoc+"')");
       cerrarBase();
    }

    public String[] dameRefAColectOtrosDoc(int id2, int iddoc) throws ClassNotFoundException, SQLException {
        abrirBase();
        String [] resultado;
        java.sql.Statement select = conexion.createStatement();
        ResultSet resultadoSelect = select.executeQuery("SELECT Count(*) as Num from doctienecolect where iddoc!='"+iddoc+"'"
                + "and idcolec='"+id2+"'");
        int col=resultadoSelect.findColumn("Num");
        resultadoSelect.next();
        int cuenta= resultadoSelect.getInt(col);
       resultado=new String[cuenta];
       int i=0;
       ResultSet rs=select.executeQuery("Select nombre from doctienecolect, colectivo where iddoc!='"+iddoc+"'"
                + "and idcolec='"+id2+"' and id='"+id2+"' group by nombre");                
                    while (rs.next())
                    {
                         resultado[i]=rs.getString(1)+'\n';
                         i++;
                    }
       cerrarBase();
       return resultado;
    }

    public int dameIDColecPorNombre(String nombre) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
        int resultado = 0;
       ResultSet rs=select.executeQuery("Select id from colectivo p where p.nombre='"+nombre+"'");                
                    while (rs.next())
                    {
                         resultado=rs.getInt(1)+'\n';
                    }
       cerrarBase();
       return resultado;
    }

    public void anyadirDocTieneAcont(int iddoc, int id2) throws ClassNotFoundException, SQLException {
        abrirBase();
        java.sql.Statement select = conexion.createStatement();
       select.executeUpdate ("INSERT INTO doctieneacont (idacont, iddoc) VALUES('"+id2+"', '"+iddoc+"')");
       cerrarBase();
    }

    public String[] dameRefAAcontOtrosDoc(int id2, int iddoc) throws ClassNotFoundException, SQLException {
         abrirBase();
        String [] resultado;
        java.sql.Statement select = conexion.createStatement();
        ResultSet resultadoSelect = select.executeQuery("SELECT Count(*) as Num from doctieneacont where iddoc!='"+iddoc+"'"
                + "and idacont='"+id2+"'");
        int col=resultadoSelect.findColumn("Num");
        resultadoSelect.next();
        int cuenta= resultadoSelect.getInt(col);
       resultado=new String[cuenta];
       int i=0;
       ResultSet rs=select.executeQuery("Select nombre from doctieneacont, acontecimiento where iddoc!='"+iddoc+"'"
                + "and idacont='"+id2+"' and id='"+id2+"' group by nombre");                
                    while (rs.next())
                    {
                         resultado[i]=rs.getString(1)+'\n';
                         i++;
                    }
       cerrarBase();
       return resultado;
    }

    public int numPers() throws ClassNotFoundException, SQLException {
        abrirBase();
			java.sql.Statement select = conexion.createStatement();	
			ResultSet resultadoSelect = select.executeQuery("SELECT Count(*) as Nombre FROM personaje");
			int col=resultadoSelect.findColumn("Nombre");
			resultadoSelect.next();
			int cuenta= resultadoSelect.getInt(col);			
			cerrarBase();
                        return cuenta;
    }


    
    
    
    
}
